#ifndef SET_INCLUDED
#define SET_INCLUDED

#define T Set_T
typedef struct T *T;

T      Set_new(int hint, int cmp(const void *x, const void *y), unsigned int hash(const void *x));
void   Set_free(T *set);
int    Set_length(T set);
int    Set_member(T set, const void *member);
void   Set_put(T set, const void *member);
void*  Set_remove(T set, const void *member);
void   Set_map(T set, void apply(const void *member, void *cl), void *cl);
void** Set_toArray(T set, void *end);

T Set_union(T s, T t);
T Set_inter(T s, T t);
T Set_minus(T s, T t);
T Set_diff(T s, T t);

#undef T

#endif
